/*
 * @author				: Juliano Zinni
 * @create				: 16/09/2011
 * @version				: 1.0
 * @description			: Página responsável por controlar as movimentações financeiras
*/



/*
 * @description: Funções para manipulação de movimentações
 * @author: Juliano Zinni
 * @since: 16/09/2011
*/

var functionsGridMovimentacao = {
	
	createEntrada: function(){
		functionsEntradaForm.resetForm();	
		functionsEntradaForm.init();
		listaDotacoes.removeAll();
		functionsPessoaMovimentacao.listarPessoasEntrada();
		windowEntradaForm.show();
	}

	
	,listaDotacoes: function(){
		if(barButtonMovimentacao.Projeto_codigo.getValue() != ""){
			var objparams = {
				Projeto_codigo: barButtonMovimentacao.Projeto_codigo.getValue()
			}
			storeDotacoes.load({params : objparams, callback: functionsGridMovimentacao.returnListaDotacoes});
		}else{
			barButtonMovimentacao.Dotacao_codigo.clearValue();
			storeDotacoes.removeAll();
		}
	}
	
	,returnListaDotacoes: function(record, options, success){
		if(success){
			barButtonMovimentacao.Dotacao_codigo.clearValue();
		}else{
			Ext.ux.MessageBox.flash({
				msg: "Ocorreu algum erro no momento da listagem das dotações",
				type: 'error'
			});
		}
	}
	
	
	,executaFiltragem: function(){
		
		
		var objparams = {
			Projeto_codigo: barButtonMovimentacao.Projeto_codigo.getValue()
			,Dotacao_codigo: barButtonMovimentacao.Dotacao_codigo.getValue()
			,dataInicio: Ext.util.Format.date(barButtonMovimentacao.dataInicio.getValue(), 'Y-m-d')
			,dataFim: Ext.util.Format.date(barButtonMovimentacao.dataFim.getValue(), 'Y-m-d')
		}
		listaMovimentacoes.load({params : objparams, callback: this.returnListaMovimentacoes});
		
	}
	
	,gerarRelatorio: function(){
		functionsGridMovimentacao.executaFiltragem();
		window.open( baseURL + "/service/index.php?controller=RelatorioController&service=gerarRelatorioFinanceiro&Projeto_codigo=" + barButtonMovimentacao.Projeto_codigo.getValue() + "&Dotacao_codigo=" + barButtonMovimentacao.Dotacao_codigo.getValue() + "&dataInicio=" + Ext.util.Format.date(barButtonMovimentacao.dataInicio.getValue(), 'Y-m-d') + "&dataFim=" + Ext.util.Format.date(barButtonMovimentacao.dataFim.getValue(), 'Y-m-d'))
	}
	

	,createSaida: function(){
		functionsSaidaForm.resetForm();	
		functionsSaidaForm.init();
		listaDotacoesSaida.removeAll();
		listaAtividades.removeAll();
		listaPessoasSaida.removeAll();
		windowSaidaForm.show();
	}
	
	,trataValor: function(v, metaData, rec){
		metaData.style = "width:23px;background-color:green !important;";
	}
	
	,carregaGrid: function(){
		var objparams = {
			action: "listaMovimentacoes"
		}
		listaMovimentacoes.load({params : objparams, callback: this.returnListaMovimentacoes});
	}
	
	,returnListaMovimentacoes: function(record, options, success){
		
		if(success){
			/*
			Ext.ux.MessageBox.flash({
				msg: "Movimentações listadas com sucesso",
				type: 'success'
			});
			*/
		}else{
			Ext.ux.MessageBox.flash({
				msg: "Ocorreu algum erro no momento da listagem das movimentações",
				type: 'error'
			});
		}
		

	}
	
	,editRecord: function(){
		
		if(Ext.getCmp('gridMovimentacao').getSelectionModel().hasSelection()){
			var selectedRow = Ext.getCmp('gridMovimentacao').getSelectionModel().getSelections();
			var objetoMovimentacao = selectedRow[0].data;
			
			if(objetoMovimentacao.tipo == "C"){
				functionsEntradaForm.resetForm();	
				functionsLoadDataUpdate.listarPessoasEntrada(objetoMovimentacao.Projeto_codigo, objetoMovimentacao.codigo);
				windowEntradaForm.show();
			}else if(objetoMovimentacao.tipo == "D"){
				
				functionsSaidaForm.resetForm();
				//alert(objetoMovimentacao.Pessoa_tipo);
				functionsLoadDataUpdateSaida.listarPessoasSaida(objetoMovimentacao.tipoPessoa, objetoMovimentacao.Projeto_codigo, objetoMovimentacao.codigo);
				windowSaidaForm.show();
				//alert("abre para edição: débito");
			}
			
			
		}else{
			Ext.ux.MessageBox.flash({
				msg: 'Nenhum registro foi selecionado!',
				type: 'warning',
				pause: 3
			});
		}
		
	}
	
	,deleteRecord: function(){
		
		if(Ext.getCmp('gridMovimentacao').getSelectionModel().hasSelection()){
			
			Ext.MessageBox.confirm('Confirmação de Exclusão','Realmente deseja excluir esse registro?', function(btn)
			{
				if(btn == 'yes')
				{
					var selectedRow = Ext.getCmp('gridMovimentacao').getSelectionModel().getSelections();
					this.params = "&codigoMovimentoCaixa=" + selectedRow[0].data.codigo;
					
					Ext.Ajax.request({
						url: baseURL + '/service/index.php?controller=MovimentoCaixaController&service=excluir',
						success:  function(result){
						
							var objRetorno = Ext.decode(result.responseText);
							
							if(objRetorno.success == true){
								functionsGridMovimentacao.carregaGrid();
								Ext.ux.MessageBox.flash({
									msg: objRetorno.message,
									type: 'success'
								});
							}else{
								Ext.ux.MessageBox.flash({
									msg: objRetorno.message,
									type: 'error'
								});
							}
			
						},
						
						params: this.params,
						scope: this			
					});
				}
			}, this);
			
		}else{
			Ext.ux.MessageBox.flash({
				msg: 'Nenhum registro foi selecionado!',
				type: 'warning',
				pause: 3
			});
		}
		
	}
	
}

var storeProjetos = new Ext.data.JsonStore({
	autoLoad : true,
	url : baseURL + '/service/index.php?controller=ProjetoController&service=listarProjetos',
	root : "elements",
	fields : [ 
	    {
			name: 'Projeto_codigo',
			mapping: 'codigo'
	    }, 
	    {
			name : "Projeto_nome",
			mapping : "nome"
	    }
	],
	
	listeners: {
		"load": function(){
    		var defaultData = {
    			Projeto_codigo: '',
    			Projeto_nome: '--'
    		};
    		var recId = 100; // provide unique id for the record
    		var r = new this.recordType(defaultData, ++recId); // create new record
    		this.insert(0, r); // insert a new record into the store (also see add)
		}
	
	}
});


var storeDotacoes = new Ext.data.JsonStore({
    storeId: 'storeDotacoes',
    url: baseURL + '/service/index.php?controller=DotacaoController&service=listarDotacoes',
    root: 'elements',
    autoLoad: false,
	fields: [
		{
		    name: 'Dotacao_codigo',
		    mapping: 'codigo'
		}
		,{
            name: 'Dotacao_nome',
            mapping: 'nome'
        }
    ],
    
    listeners: {
		"load": function(){
    		var defaultData = {
    			Dotacao_codigo: '',
    			Dotacao_nome: '--'
    		};
    		var recId = 100; // provide unique id for the record
    		var r = new this.recordType(defaultData, ++recId); // create new record
    		this.insert(0, r); // insert a new record into the store (also see add)
		}
	
	}
});




var controlePaginacao = {
	start: 0,
	limit: 10
};

var readerListaMovimentacoes = new Ext.data.JsonReader({
    root: 'elements',
    remoteGroup:true,
    remoteSort: true,
    fields: [
        {
		    name: 'codigo',
		    mapping: 'codigo',
		    type: 'int'
		}
		,{
		    name: 'Atividade_codigo',
		    mapping: 'Atividade_codigo',
		    type: 'int'
		}
		,{
		    name: 'Atividade_nome',
		    mapping: 'Atividade_nome',
		    type: 'string'
		}
		,{
		    name: 'Pessoa_codigo',
		    mapping: 'Pessoa_codigo',
		    type: 'int'
		}
		,{
		    name: 'Pessoa_nome',
		    mapping: 'Pessoa_nome',
		    type: 'string'
		}
		
		,{
		    name: 'tipoPessoa',
		    mapping: 'tipoPessoa',
		    type: 'string'
		}
		,{
		    name: 'Dotacao_codigo',
		    mapping: 'Dotacao_codigo',
		    type: 'int'
		}
		,{
		    name: 'Dotacao_nome',
		    mapping: 'Dotacao_nome',
		    type: 'string'
		}
		,{
		    name: 'Projeto_codigo',
		    mapping: 'Projeto_codigo',
		    type: 'int'
		}
		,{
		    name: 'Projeto_nome'
		    ,mapping: 'Projeto_nome'
		    ,type: 'string'
		}
		
		,{
		    name: 'dataMovimentacao2'
		    ,mapping: 'dataMovimentacao2'
		    ,type: 'date'
			,dateFormat: 'Y-m-d'
		}
		
		,{
		    name: 'dataMovimentacao'
		    ,mapping: 'dataMovimentacao'
		    ,type: 'date'
			,dateFormat: 'Y-m-d'
		}
		,{
		    name: 'tipo',
		    mapping: 'tipo',
		    type: 'string'
		}
		
		,{
		    name: 'descricao',
		    mapping: 'descricao',
		    type: 'string'
		}
		
		,{
		    name: 'valorOperacao'
		    ,mapping: 'valorOperacao'
		    ,type: 'float'
		}
		
		,{
		    name: 'especie',
		    mapping: 'especie',
		    type: 'string'
		}
		
		,{
		    name: 'numeroNota',
		    mapping: 'numeroNota',
		    type: 'int'
		}
 
    ],
    totalProperty: 'results'
});

/*
var filtroMovimentacoes = new Ext.ux.grid.GridFilters({
	encode : true,
	menuFilterText : "Filtro",
	filters : [ 
	    {
	    	type : "list",
			dataIndex : "Projeto_nome",
			store : storeProjetos,
			labelField : "descricao",
			phpMode : true
	    }
	    
	]
});
*/


var listaMovimentacoes = new Ext.data.GroupingStore({
    reader: readerListaMovimentacoes
	,proxy : new Ext.data.HttpProxy({
    	url: baseURL + '/service/index.php?controller=MovimentoCaixaController&service=listarMovimentosCaixa',
        method: 'POST'
    })
	,baseParams: controlePaginacao
    ,sortInfo: {field: 'dataMovimentacao', direction: 'ASC'}
    ,groupField: 'dataMovimentacao'
    	
    ,listeners : {
		load : function(d) {
	    		
	    	if (d.getCount()) {
				var c = '<span style="color:green">'+ Ext.util.Format.number(d.getAt(0).json.valorEntrada, '0.000,00/i') + "</span>";
				var b = '<span style="color:red">'+ Ext.util.Format.number(d.getAt(0).json.valorSaida, '0.000,00/i') + "</span>";
				var a = d.getAt(0).json.valorEntrada - d.getAt(0).json.valorSaida;
				var f = Ext.util.Format.number(d.getAt(0).json.valorEntrada - d.getAt(0).json.valorSaida, '0.000,00/i');
				var e = (a < 0) ? "red"
						: "green"
			} else {
				var c = '<span style="color:green">'+ Ext.util.Format.number(0, '0.000,00/i') + "</span>";
				var b = '<span style="color:red">'+ Ext.util.Format.number(0, '0.000,00/i') + "</span>";
				var f = '<span style="color:green">'+ Ext.util.Format.number(0, '0.000,00/i') + "</span>"
			}
    	
    		Ext.getCmp("totalEntradas").setText("<b>Total de Entradas: </b>" +  c);
			Ext.getCmp("totalSaidas").setText("<b>Total de Saídas: </b>" + b);
			Ext.getCmp("saldoTotal").setText('<b>Saldo Total Geral: <span style="color:' + e + '"><b>' + f + "</b></span></b>");
    	}
    }

});




// utilize custom extension for Hybrid Summary
var summary = new Ext.ux.grid.HybridSummary();


var barButtonMovimentacao = new Ext.Toolbar({
	items: [
		{
        	text: 'Nova Doação'
        	,handler: functionsGridMovimentacao.createEntrada
        	,iconCls: 'bt_novo'
    	}
		,{
        	text: 'Nova Saída'
        	,handler: functionsGridMovimentacao.createSaida
        	,iconCls: 'bt_novo'
    	}
		
    	,{
        	text: 'Editar'
        	,iconCls: 'bt_editar'
        	,handler: functionsGridMovimentacao.editRecord
        	,disabled: true
        	,id: 'btEditarMovimentacao'
    	}
    	,{
        	text: 'Deletar'
        	,iconCls: 'bt_deletar'
        	,handler: functionsGridMovimentacao.deleteRecord
        	,disabled: true
        	,ref: 'deletar'
        	,id: 'btDeletarMovimentacao'
    	},
    	
    	"->",
    	{
    		xtype: 'label',
    		text: 'Projeto',
    		style: 'margin-right:5px'
		},
    	
    	{
    		xtype: 'combo'
			,name: 'Projeto_codigo'
			,store: storeProjetos
			,displayField: 'Projeto_nome'
			,valueField: 'Projeto_codigo'
			,hiddenName: 'Projeto_codigo'
			,mode: 'local'
			,ref: 'Projeto_codigo'
			,typeAhead: true					
			,editable: false
			,width: 100
			,triggerAction: 'all'
			,listeners:{
	         	scope: this
	         	,'select': function(){
					functionsGridMovimentacao.listaDotacoes()
				}
	      	}
		},
		
		{
    		xtype: 'label',
    		text: 'Dotação',
    		style: 'margin-right:5px'
		},
    	
    	{
    		xtype: 'combo'
			,name: 'Dotacao_codigo'
			,store: storeDotacoes
			,displayField: 'Dotacao_nome'
			,valueField: 'Dotacao_codigo'
			,hiddenName: 'Dotacao_codigo'
			,mode: 'local'
			,ref: 'Dotacao_codigo'
			,typeAhead: true					
			,editable: false
			,width: 100
			,triggerAction: 'all'
		},
		
		
		{
    		xtype: 'label',
    		text: 'Data Início',
    		style: 'margin-right:5px; padding-left:5px'
		},
    	
		{
			xtype: 'datefield'
			,fieldLabel:'Data Início'
			,ref: 'dataInicio'
			,name:'dataInicio'
		},
		
		{
    		xtype: 'label',
    		text: 'Data Fim',
    		style: 'margin-right:5px; padding-left:5px'
		},
    	
		{
			xtype: 'datefield'
			,fieldLabel:'Data Fim'
			,ref: 'dataFim'
			,name:'dataFim'
		},
		
		{
			text : "Executa Filtragem",
			tooltip : "Busca Movimentações com base nos filtros selecionados",
			scope : this,
			handler : functionsGridMovimentacao.executaFiltragem
		},
		
		{
			text : "Gerar Relatório",
			tooltip : "Gera relatório em PDF das movimentações, com base na seleção da filtragem",
			scope : this,
			handler : functionsGridMovimentacao.gerarRelatorio
		}
    ]
});

var gridMovimentacao = new Ext.grid.GridPanel({
	ds: listaMovimentacoes
	, id: 'gridMovimentacao' 
	, stripeRows: true
	, selModel: new Ext.grid.RowSelectionModel({singleSelect : true})
	, loadMask: true
	, viewConfig:{
		emptyText		: 'Nenhum registro encontrado'
		,deferEmptyText : false
		
	}
	, tbar: barButtonMovimentacao
	, width: '100%'
	, autoExpandColumn: 'Atividade_nome'
	, view: new Ext.grid.GroupingView({
		forceFit: true,
        showGroupName: false,
        enableNoGroups: false,
		enableGroupingMenu: false,
        hideGroupedColumn: true
    })

    , plugins: [summary]
	, columns:[
		{
			dataIndex: 'codigo'
			, id:'codigo'	
			, header: 'Cod'
			, hidden: true
			, width: 60
        }
		
		,{
			dataIndex: 'tipo'
			, header: 'Tipo'
			, width: 90
			, summaryType: 'count'
			, summaryRenderer: function(v, params, data){
            	return ((v === 0 || v > 1) ? '(' + v +' Movimentos)' : '(1 Movimento)');
        	}
			,renderer: function(v){
				if(v == "C"){
					return "<span style='color:green;'><b>Crédito</b></span>";
				}else{
					return "<span style='color:red;'><b>Débito</b></span>";
				}
			}
		}
		
		,{
			dataIndex: 'Pessoa_nome'
			, sortable : true 
			, header: 'Pessoa Movimento'
			, width: 200
		}
		
		,{
			dataIndex: 'Projeto_nome'
			, header: 'Projeto'
			, width: 200
		}
		
		,{
			dataIndex: 'Dotacao_nome'
			, header: 'Dotação'
			, width: 200
		}
		
		,{
			dataIndex: 'Atividade_nome'
			, header: 'Atividade'
			, id: 'Atividade_nome'
			, width: 200
		}
		
		,{
			dataIndex: 'dataMovimentacao'
			, header: 'Data Movimentação'
			, sortable : true
			, width: 110
			, renderer: Ext.util.Format.dateRenderer('m/Y')
		}
		
		
		,{
			dataIndex: 'dataMovimentacao2'
			, header: 'Data Movimentação'
			, sortable : true
			, width: 110
			, renderer: Ext.util.Format.dateRenderer('d/m/Y')
		}
		
		,{
			dataIndex: 'valorOperacao'
			,header: 'Valor Operação'
			,width: 100
			,renderer : function(c, d, b) {
				var a = Ext.util.Format.number(c, '0.000,00/i');
				return (b.data.tipo == "C") ? '<span style="color:green;">' + a + "</span>" : '<span style="color:red;">' + a + "</span>";
			}
			,summaryType:'sum'
			,summaryRenderer : function(b, e, c) {
				var d = (b < 0) ? "red"	: "green";
				var a = Ext.util.Format.number(b, '0.000,00/i');
				return '<span style="color:' + d + ';">' + a + "</span>";
			}	
		}
	]
	
	,bbar : new Ext.PagingToolbar({
		pageSize: listaMovimentacoes.baseParams.limit,
        store: listaMovimentacoes,
        displayInfo: true,
		displayMsg : "Exibindo {0} - {1} de {2} registro(s)",
        emptyMsg : "Nenhum registro encontrado",
		items : [
			"-",
			{
				text : "",
				id : "totalEntradas",
				xtype : "tbtext"
			},
			"-",
			{
				text : "",
				id : "totalSaidas",
				xtype : "tbtext"
			},
			"-",
			{
				text : "",
				id : "saldoTotal",
				xtype : "tbtext"
			} 
		]
	})
});

gridMovimentacao.getSelectionModel().on('selectionchange', function(sm){
	Ext.getCmp('btEditarMovimentacao').setDisabled(sm.getCount() < 1)
	Ext.getCmp('btDeletarMovimentacao').setDisabled(sm.getCount() < 1)
});

function writeMovimentacao(){
	var myCloseTab = centerTabs.get( 1 );
	if (myCloseTab){
		centerTabs.remove( myCloseTab );
	}
	var title = "Manter Movimentação";
	var tab = centerTabs.items.find(function(i){return i.title === title;});
	if(!tab) {
		tab = centerTabs.add({
			title:title
			,layout:'fit'
			,items: [ gridMovimentacao ]
			,closable:true
			,listeners: {
				"afterrender": function(){ // carregamento só é executado depois da tela ser renderizada
					functionsGridMovimentacao.carregaGrid()

				}
			}
			
		});
	}
	centerTabs.setActiveTab(tab);
}